package fr.ensai.lignededix.bd;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;

import fr.ensai.lignededix.controleur.ControleurPartie;
import fr.ensai.lignededix.exceptions.FonctionalException;
import fr.ensai.lignededix.metier.joueur.Joueur;
import fr.ensai.lignededix.metier.partie.Coup;
import fr.ensai.lignededix.metier.partie.Partie;

public class CoupDAO extends DAO<Coup> {



	public int create(Coup obj) throws FonctionalException {

		int idCoup=-1;
		try{


			Statement instruction = connect.createStatement();

			ResultSet resultat= instruction.executeQuery("SELECT seqCoup.nextval from dual");
			resultat.next();
			idCoup=resultat.getInt(1);


			if(ControleurPartie.getJoueurCourant().getCouleur()==Joueur.BLANC){
				instruction.executeUpdate("INSERT INTO Coup (idCoup, couleur, idPartie, idJeton, idCaseDepart, idCaseArrivee) VALUES " +
						"("+idCoup+", '"+"blanc"+"',"+obj.getNumPartie()+","+obj.getJeton().getNumJeton()+","+obj.getCaseDepart().getNumCase()+","+obj.getCaseArrivee().getNumCase()+")");
			} else{
				instruction.executeUpdate("INSERT INTO Coup (idCoup, couleur, idPartie, idJeton, idCaseDepart, idCaseArrivee) VALUES " +
						"("+idCoup+", '"+"noir"+"',"+obj.getNumPartie()+","+obj.getJeton().getNumJeton()+","+obj.getCaseDepart().getNumCase()+","+obj.getCaseArrivee().getNumCase()+")");
			}


			instruction.close();


		}
		catch(SQLException e){
			e.printStackTrace();
			throw new FonctionalException("Le coup n'a pas pu être sauvegardé.");
		}
		return idCoup;

	}

	@Override
	public Coup update(Coup obj) {
		throw new UnsupportedOperationException();

	}

	@Override
	public void delete(Coup obj) {
		throw new UnsupportedOperationException();

	}


	@Override
	public boolean isPseudoValide(String pseudo) {
		throw new UnsupportedOperationException();
	}


	@Override
	public int authentifier(String pseudo, String mdp) {
		throw new UnsupportedOperationException();

	}

	@Override
	public Coup find(int id) {
		throw new UnsupportedOperationException();
	}


	@Override
	public void executerRequete(String ligne) {
		throw new UnsupportedOperationException();

	}


	@Override
	public void updateDateFin(Coup obj) {
		throw new UnsupportedOperationException();

	}



	@Override
	public String calculerDesStatistiques(Coup obj) {
		throw new UnsupportedOperationException();

	}

	@Override
	public List<Coup> getAll(int idUtilisateur1, int idUtilisateur2) {
		throw new UnsupportedOperationException();
	}



	@Override
	public void sinscrireSurListeAttente(Coup obj) throws FonctionalException {
		throw new UnsupportedOperationException();

	}

	@Override
	public List<Coup> obtenirListeAttente(Coup obj) throws FonctionalException {
		throw new UnsupportedOperationException();
	}

	@Override
	public void desinscrireListeAttente(Coup obj) throws FonctionalException {
		throw new UnsupportedOperationException();

	}

	@Override
	public void updateScore(Partie partieInterrompueOuFinie)
			throws FonctionalException {
		throw new UnsupportedOperationException();
		
	}
	//Constructeur

	public CoupDAO(Connection connect) {
		this.connect=connect;

	}

	

}
